//=============================================================================
/**
 * @file	pkthln_shot_local.h
 * @brief	シュート
 * @date	2008.12.09
 */
//=============================================================================

#ifndef	__PKTHLN_SHOT_LOCAL_H__
#define	__PKTHLN_SHOT_LOCAL_H__

#include "../../pokethlon.h"
#include "../../pkthln_poke_act.h"

#define DASH_EFF_NUM	(3)
#define SHOT_EVENT_POKE_NUM	(ENTRY_MAX*ENTRY_MEMBER_NUM_MAX)
#define BALL_MAX	(2)

#define NORM_BALL_RANGE	(8)
#define GOLD_BALL_RANGE	(12)

typedef enum {
	KNOCKBACK_NONE,
	KNOCKBACK_ATTACK,		//シュート攻撃時ノックバック
	KNOCKBACK_GARD,			//シュートガード時ノックバック
	KNOCKBACK_DAMAGE,		//シュートダメージ時ノックバック
} KNOCKBACK_TYPE;

typedef enum {
	SP_STATE_NORMAL,
	SP_STATE_DASH,
	SP_STATE_PANIC,
	SP_STATE_FATIGUE,
}SHOT_POKE_STATE;

typedef enum {
	BALL_STATE_NORMAL,
	BALL_STATE_GOAL,
	BALL_STATE_ATTACK,
	BALL_STATE_READY,
}SHOT_BALL_STATE;

typedef enum {
	BALL_MV_TYPE_NONE,
	BALL_MV_TYPE_DRIBBLE,
	BALL_MV_TYPE_SHOT,
}BALL_MV_TYPE;

typedef enum {
	BALL_NONE,
	BALL_TYPE_NORMAL,
	BALL_TYPE_GOLD,
}BALL_TYPE;

typedef struct SHOT_POKE_PARAM_tag
{
	fx32 MoveWalk;					//歩行速度
	fx32 MoveDash;					//ダッシュ速度
	u16 ShotRange;					//シュート範囲
	u16 GardRange;					//守備範囲
	u8 StaminaMax;					//スタミナ最大値
	u8 StaminaNow;					//現在のスタミナ
	u8 ShotPower;					//シュートパワー
	u8 Technique;					//テクニック
	u8 Stamina;						//スタミナ
	u8 Power;						//パワー
	u8 dummy[2];

}SHOT_POKE_PARAM;

typedef struct KNOCK_BACK_tag
{
	KNOCKBACK_TYPE Type;
	VecFx32 Dir;
	s16 Spd;
	s16 Freeze;
}KNOCK_BACK;

typedef struct SHOT_POKE_tag
{
	//アクターポインタ
	POKE_ACT_PTR PokeActPtr;		//ポケモンアクター
	//汗
	PKTHLN_ACT_PTR	StateActPtr;
	//ダッシュエフェクト
	PKTHLN_ACT_PTR	DashActPtr[DASH_EFF_NUM];
	//座標
	VecFx32 Pos;
	//タッチ有効半径
	int HitRange;

	VecFx32 LastPoint;	//最終到達地点（親が見る）
	VecFx32 NowPoint;	//現在地点（親が見る）
	VecFx32 MoveDir;

	KNOCK_BACK KnockBack;		//ノックバック状態
	u16 Dir;
	u16 Score;

	u8 PanicCount;
	u8 RcvTime;
	u8 DashEffIdx;	//0〜DASH_EFF_NUM-1
	u8 DashEffWait;	//次のダッシュエフェクトまでのウェイト

	SHOT_POKE_PARAM	Param;
	//ステート
	SHOT_POKE_STATE State;

}SHOT_POKE;

typedef struct SHOT_BALL_tag
{
	PKTHLN_ACT_PTR	BallActPtr;
	PKTHLN_ACT_PTR	EffActPtr;
	//座標
	VecFx32 Pos;
	VecFx32 MoveVec;
	VecFx32 DirVec;
	u8 Hit[SHOT_EVENT_POKE_NUM];
	u8 Type;
	u8 State;
	u8 GoalCounter;
	u8 Owner;
	u8 MvFrame;
	u8 MvFrameMax;
	u8 MvType;
	u8 GoalEffFlg;		//ゴールエフェクト実行中フラグ
	u8 MvVal;
	u8 MvValIdx;
	u8 GeneIdx;
	u8 AppCount;

	u8 LocalState;
	u8 ShotPower;
	u16 Power;
	BOOL WallHit;
}SHOT_BALL;

#endif	//__PKTHLN_SHOT_LOCAL_H__